SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paCalcularTodosLosPuntajesF]

-- Parametros
@convocatoria INT,
@nivel INT,
@ciclo INT

AS

-- Variables Locales
DECLARE @tempFormula VARCHAR(100)
DECLARE @concepto INT
DECLARE @inscripcion INT
DECLARE @error INT

BEGIN TRANSACTION

	--Fabito--------------
	IF EXISTS(SELECT * FROM tb_CalificacionesDeInscripcion CI INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria WHERE C.IdConvocatoria = @convocatoria ) BEGIN
		PRINT 'BORRO todos LOS PUNTAGES de la tabla tb_calificacionesDeinscripcion'
		DELETE CI
		FROM tb_CalificacionesDeInscripcion CI 
		INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
		WHERE C.IdConvocatoria = @convocatoria

	END
	--------------------------

	DECLARE X CURSOR FOR

	SELECT CP.FormulaPuntaje, CP.IDConcepto, IC.IdInscripcionConvocatoria
	FROM tb_ConceptosDePuntaje CP INNER JOIN tb_TiposDeConvocatorias TC ON CP.TipoConvocatoria = TC.IdTipoConvocatoria 
	INNER JOIN tb_Convocatorias C ON C.TipoConvocatoria = TC.IdTipoConvocatoria
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.Convocatoria = C.IdConvocatoria
	WHERE C.IdConvocatoria = @convocatoria AND CP.FormulaPuntaje IS NOT NULL

	OPEN X

	FETCH NEXT FROM X INTO @tempFormula, @concepto, @inscripcion

	WHILE @@FETCH_STATUS = 0 BEGIN
	
		DECLARE @temp VARCHAR(1000)
		SELECT @temp = 'DECLARE @puntaje FLOAT ' + char(10) + 'SET @puntaje = 0 ' + char(10)
		SELECT @temp = @temp + 'EXEC ' +@tempFormula + ' ' + convert(varchar, @inscripcion) + ', @puntaje output, 0' + char(10)
		--SELECT @temp = @temp + 'INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje) VALUES(' + convert(varchar, @inscripcion) + ', ' + convert(varchar, @concepto) +', ISNULL(@puntaje, 0))'
		SELECT @temp = @temp + 'EXEC paAgregarCalificacionesDeInscripcion ' + convert(varchar, @inscripcion) + ', ' + convert(varchar, @concepto) +', @puntaje'
		PRINT(@temp)
		EXEC(@temp)
		SELECT @error = @@error

		IF @error <> 0 
		BEGIN
			
			GOTO Salir
		END

		FETCH NEXT FROM X INTO @tempFormula, @Concepto, @inscripcion
	END

	CLOSE X
	DEALLOCATE X
/*
	--  COMPLETA EL CONCEPTO PUNTAJE FINAL
	INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
	SELECT CI.Inscripcion, 468, SUM(CI.Puntaje)
	FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
	WHERE IC.Convocatoria = @convocatoria
	GROUP BY CI.Inscripcion

	IF @@error <> 0 BEGIN
		SELECT @error = @@error
		GOTO Salir
	END

	--  COMPLETA EL CONCEPTO PUNTAJE ACRECENTAMINETO
	-- Falta cheuqear como lo calcula
	INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
	SELECT CI.Inscripcion, 469, SUM(CI.Puntaje)
	FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
	WHERE IC.Convocatoria = @convocatoria AND CI.Concepto <> 468
	GROUP BY CI.Inscripcion

	IF @@error <> 0 BEGIN
		SELECT @error = @@error
		GOTO Salir
	END
*/
Salir:
IF @error <> 0 BEGIN
	--CLOSE X
	--DEALLOCATE X
	--DECLARE @temp1 VARCHAR(100)
	--SET @temp1 = 'ERROR EN EL PROC ' + @tempFormula  
	--RAISERROR(@temp1, 16, 1)
	PRINT('ROLLBACK')
	ROLLBACK TRANSACTION
END
ELSE BEGIN
	PRINT('COMMIT')
	COMMIT TRANSACTION
END
GO
GRANT EXECUTE ON  [dbo].[paCalcularTodosLosPuntajesF] TO [Juntas]
GO
